package com.kakame.codenews.base.web.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.kakame.codenews.base.constant.SystemConstant;

public class BaseController {
    /**
     * <pre>
     * <b>desc:</b> 将对象转换成json字符串 
     * <b>auth:</b> 何家明
     * <b>date:</b> 2018年6月6日 上午9:18:09
     * </pre>
     * 
     * @param object
     * @return
     */
    protected String convertObjectToJson(Object object) {
        return JSON.toJSONString(object);
    }
	/**
	 * <pre>
	 * <b>desc:</b> 将json字符串转换成单个对象 
	 * <b>auth:</b> 何家明
	 * <b>date:</b> 2018年6月6日 上午9:18:09
	 * </pre>
	 * 
	 * @param json
	 * @return
	 */
	protected JSONObject convertJsonToObject(String json) {
		return JSON.parseObject(json);
	}

	/**
	 * <pre>
	 * <b>desc:</b> 将json字符串转换成数组 
	 * <b>auth:</b> 何家明
	 * <b>date:</b> 2018年6月6日 上午9:19:07
	 * </pre>
	 * 
	 * @param jsonArray
	 * @return
	 */
	protected JSONArray convertJsonToArray(String jsonArray) {
		return JSON.parseArray(jsonArray);
	}

	/**
	 * <pre>
	 * <b>desc:</b> 从session中获取字符串 
	 * <b>auth:</b> 何家明
	 * <b>date:</b> 2018年6月6日 上午9:24:11
	 * </pre>
	 * 
	 * @param session
	 * @param key
	 * @return
	 */
	protected String getSessionString(HttpSession session, String key) {
		if (StringUtils.isBlank(key)) {
			return SystemConstant.EMPTY_STRING;
		}
		Object value = session.getAttribute(key);
		if (value == null) {
			return SystemConstant.EMPTY_STRING;
		}
		return String.valueOf(value);
	}

	/**
	 * <pre>
	 * <b>desc:</b> 从session中移除指定key 
	 * <b>auth:</b> 何家明
	 * <b>date:</b> 2018年6月6日 上午9:43:14
	 * </pre>
	 * 
	 * @param session
	 * @param key
	 */
	protected void removeSessionKey(HttpSession session, String key) {
		if (StringUtils.isNotBlank(key)) {
			session.removeAttribute(key);
		}
	}

	/**
	 * <pre>
	 * <b>desc:</b> 给session赋值 
	 * <b>auth:</b> 何家明
	 * <b>date:</b> 2018年6月6日 上午9:43:14
	 * </pre>
	 * 
	 * @param session
	 * @param key
	 */
	protected void setSession(HttpSession session, String key, Object value) {
		if (StringUtils.isNotBlank(key) && value != null) {
			session.setAttribute(key, value);
		}
	}

	@InitBinder
	public void initBinder(WebDataBinder binder) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
		dateFormat.setLenient(false);
		binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); // true:允许输入空值，false:不能为空值
	}

}
